VirtualBox和Rails服务器上的Ubuntu(Ubuntu on VirtualBox and Rails server)
我有Windows 7.安装VirtualBox和Ubuntu 11.04作为客户操作系统。 网络由NAT完成。 一切都很好:我在Ubuntu上有互联网。 我可以通过它的ip从Ubuntu访问Windows。 但我无法通过ifconfig显示的ip访问Ubuntu。
我在Ubuntu上运行rails。
如何解决此问题:从我的Windows连接到ort 3000上的Ubuntu / Rails服务器?
I have Windows 7. Installed VirtualBox and Ubuntu 11.04 as guest OS. Networking is done by NAT. Everything is fine: I have internet on Ubuntu. I can access Windows from Ubuntu by its ip. But i can't access Ubuntu by it's ip which is shown by ifconfig.
I run rails on Ubuntu.
How can I solve this problem: connect to Ubuntu/Rails server on ort 3000 from my Windows?
原文:https://stackoverflow.com/questions/6801363
最满意答案
包对象被转换为名为package.class IIRC的普通java类文件。 从那时起,我假设它的行为与任何普通的Java类一样,因此它在首次引用时被加载并实例化。 在Scala中,这意味着您需要在包对象中定义一些方法或
val
,然后从外部访问它。 在您的情况下,您可以尝试从Classy
的构造函数或实例化Classy
的代码中调用它。更新
好的,这是我运行的一些代码来测试我上面描述的内容:
// package.scala package some package object pkg { println("package created!") def func() { println("func called") } } // C.scala package some.pkg class C { println("created C") } // G.scala package some.pkg object G { println("creating G") func() println("created G") } // PackageTester.scala package some.pkg object PackageTester extends App { val c = new C val g = G }
输出是:
created C creating G package created! func called created G
这证明Scala包对象是懒惰创建的,只有在它们被实际引用时才会创建。 事实上,对于“普通”Scala对象也是如此,如上面的
G
所示。The package object is translated into a normal java class file called package.class IIRC. From then on I assume it behaves like any normal Java class, thus it is loaded and instantiated when it is first referenced. In Scala, that means you need to define some method or
val
in the package object, then access it from outside. In your case, you may try calling it from the constructor ofClassy
, or from the code which instantiatesClassy
.Update
OK, here is some code I ran to test what I described above:
// package.scala package some package object pkg { println("package created!") def func() { println("func called") } } // C.scala package some.pkg class C { println("created C") } // G.scala package some.pkg object G { println("creating G") func() println("created G") } // PackageTester.scala package some.pkg object PackageTester extends App { val c = new C val g = G }
And the output is:
created C creating G package created! func called created G
Which proves that Scala package objects are created lazily, only when they are actually referenced. And in fact the same is true for "normal" Scala objects, as demonstrated by
G
above.
相关问答
更多-
尝试这个: package project.foo class Foo private[foo] (value: String) 那么Foo的构造函数只能从foo包中访问。 你可以在这里阅读更多关于Scala的可见性(特别是针对有限范围的私有和作用域保护)。 Try this: package project.foo class Foo private[foo] (value: String) Then the constructor of Foo is only accessible from the ...
-
为什么Scala类在构造函数中不能有object类型的参数?(Why Scala classes cannot have parameter of type object in contructor?)[2023-10-30]
CellType不是一个类型,它是一个对象。 它实际上是其类型CellType.type的唯一对象。 如果要使用只能是此对象的函数参数,可以使用CellType.type类型的参数。 但是,如果它只能是CellType ,为什么还要把它作为一个参数呢? 也可以直接使用对象,而不是将其作为参数传递。 你可能想要的不是CellType的类型,而是它的枚举值的类型,恰好是CellType.Value 。 注意:我个人觉得相当令人不安的是,scala语言定义了相同级别的trait和class es,即类型和obje ... -
Scala包对象getClass(Scala package object getClass)[2023-03-29]
你可以在应用程序返回类中定义方法: package object app { def cls = getClass } You can define method inside app returning class: package object app { def cls = getClass } -
正如Bob Dalgleish所说,scala对象是一个单例,所以,你不能丰富它的构造函数。 此外,有关该主题的有用阅读。 谢谢! As Bob Dalgleish said, a scala object is a singleton, so, you cannot rich its constructor. Also, there is useful reading for the subject. Thanks!
-
正如在Scala中编程中所解释的那样 ,这是因为Scala REPL为您键入的每个新语句创建了一个新的嵌套范围。这意味着您的代码被解释为: object Foo { val DefaultSize: Int = 10 } { class Foo(size: Int = Foo.DefaultSize) } 虽然同一本书提到必须在同一个源文件中定义类及其伴随对象,但似乎它们必须在同一范围内,因为上面的代码块不能用scalac编译 。 我知道有两种方法可以在REPL中解决这个问题。 如其他人所述,您可 ...
-
检查这LINKK 如何模式匹配成大写变量? ,模式匹配不适用于大写变量。 您需要将其转换为小写变量或单独执行。 Check this linke How to pattern match into an uppercase variable?, pattern match doesn't work with uppercase variables. You need to convert it lower case variables or do it seperate.
-
在Scala中,构造函数如何引用它正在创建的对象?(In Scala, how can a constructor refer to the object it is creating?)[2022-02-07]
您也可以执行以下操作。 也许它不是最习惯的Scala代码,但它很短,我认为它可以回答你的问题。 class Node(prot: Option[Node] = None) { def prototype = prot getOrElse this } You could also do the following. Maybe it is not the most idiomatic Scala code but it is short and I think it answers your questi ... -
你将不得不解释你想要这样做的动机。 名称必须是Foo的构造函数参数还是可以是抽象成员? 它是否必须是一个val或将def做。 你可以这样做 class Foo(val name: String) class Bar extends Foo("") { override val name = getClass.getName } 和new Bar().name将给予Bar 但我怀疑,如果你的真实动机是已知的,那么有一个更好的方式来做你真正想要的东西。 You are going to have to e ...
-
Scala包对象构造函数(Scala package object constructor)[2022-11-01]
包对象被转换为名为package.class IIRC的普通java类文件。 从那时起,我假设它的行为与任何普通的Java类一样,因此它在首次引用时被加载并实例化。 在Scala中,这意味着您需要在包对象中定义一些方法或val ,然后从外部访问它。 在您的情况下,您可以尝试从Classy的构造函数或实例化Classy的代码中调用它。 更新 好的,这是我运行的一些代码来测试我上面描述的内容: // package.scala package some package object pkg { print ... -
如何使用带构造函数的抽象类扩展Scala中的对象?(How to extend an object in Scala with an abstract class with constructor?)[2023-01-07]
我不知道Wood为什么要扩展AbstractResource ,但是这样可行: class AbstractResource(val amount:Int) { def getAmount = amount } case object Wood extends AbstractResource(0) { def apply(amount: Int) = { new AbstractResource(amount) } } I have no idea why should Wood ...