версия Cygwin GCC требует Cygwin быть установленной для программ, которые это компилирует.
версия MinGW ничего не требует после компиляции кроме рабочей копии Windows.
Вы не можете действительно смешать среду Cygwin и компиляторы MinGW вместе, потому что Cygwin изменяет пути предварительно скомпилированных библиотек.
, Если бы Вы нуждаетесь в оболочке стиля удара, но не хотите использовать Cygwin, я рекомендовал бы MSYS.
, скопированного от , приложения MinGW Wiki
Cygwin принципом не рассматриваются "Собственное заявление Win32", потому что это полагается на CygwinВ® POSIX Emulation DLL илиcygwin1.dll
для функций Posix и не использует функции win32 непосредственно. MinGW, с другой стороны, обеспечивает функции, предоставленные API Win32. При портировании приложений под MinGW функции, не собственные к Win32 такой какfork()
,mmap()
илиioctl()
, должны будут быть повторно реализованы в эквиваленты Win32 для приложения для функционирования правильно.
Они имеют те же имена, что и соответствующие имена #define
в стеке сокетов C BSD, за исключением Socket ::
впереди. (И для протокола, чтобы точно ответить на ваш вопрос, я должен сказать "в ext / socket / socket.c
" в дереве исходных текстов Ruby.) Итак:
>> require 'socket'
=> true
>> Socket::MSG_PEEK
=> 2
Вероятно, вы можете увидеть это, набрав man 2 recv
, хотя вам может потребоваться сначала установить пакет страниц руководства. Есть также онлайн-страницы руководства, см., Возможно,: man 2 recv здесь .
На данный момент вот то, что вам нужно, это параметры Posix, взятые из справочной страницы NetBSD . В Linux доступно гораздо больше. При работе в Linux Ruby определяет дополнительные символы, в противном случае они могут быть неопределенными в зависимости от хоста. (Спасибо,
Ответ Питера
obj = lambda: None
obj.propertyName = 'propertyValue'
Я не знаю, есть ли встроенный способ сделать это, но вы всегда можете определить класс вроде этого:
class InlineClass(object):
def __init__(self, dict):
self.__dict__ = dict
obj = InlineClass({'propertyName' : 'propertyValue'})
Мне нравится идея Smashery , но Python, похоже, доволен тем, что позволяет вам изменять классы самостоятельно :
>>> class Inline(object):
... pass
...
>>> obj = Inline()
>>> obj.test = 1
>>> obj.test
1
>>>
У меня отлично работает в Python 2.5. Обратите внимание, что вы должны сделать это для класса, производного от объекта
- это не сработает, если вы измените строку на obj = object
.
В Python легко объявить класс с помощью функции __ init __ ()
, которая может настроить экземпляр за вас с дополнительными аргументами. Если вы не укажете аргументы, вы получите пустой экземпляр, а если вы укажете некоторые или все аргументы, вы инициализируете экземпляр.
Я объяснил это здесь (мой самый высокий на сегодняшний день ответ ), поэтому я не буду перепечатывать объяснение. Но, если есть вопросы, задавайте, и я отвечу.
Если вам просто нужен общий объект, класс которого на самом деле не имеет значения, вы можете сделать следующее:
class Generic(object):
pass
x = Generic()
x.foo = 1
x.bar = 2
x.baz = 3
Очевидным расширением было бы добавление функции __ str __ ()
, которая выводит что-то полезное.
Этот трюк иногда бывает удобен, когда вам нужен более удобный словарь. Мне легче набрать x.foo
, чем x ["foo"]
.
class test:
def __setattr__(self,key,value):
return value
myObj = test()
myObj.mykey = 'abc' # set your property and value